package com.uco.oop;

// 特点：创建对象的时候，会自动调用构造器，默认返回构造的对象
// 作用：创建对象时，简化了创建对象的过程
// 注意事项：类默认自带一个无参数构造器
// 如果有参数构造器，则默认无参数构造器失效，如果还想有无参数构造器，则需要显示的声明，为了不影响别人使用，需要同时显示的声明
public class Constructor {
    // static 静态变量只加载一次，类和类的对象都可以访问（公共的）
    // 适合共有的变量，只有一份数据那种

    static String name;
    int age;
    int height;

    // 无参数构造器
    public Constructor() {
        Constructor.name = "Constructor";
        System.out.println("无参数构造器");
    }

    // 有参数构造器
    public Constructor(int a) {
        System.out.println("有参数构造器");
    }

    // 构造器重载
    public Constructor(int age, int height) {
        System.out.println("构造器重载");
        // this 关键字，在类中指代类的对象
        // 哪个对象调用这个方法，this就指代哪个对象（可以省略，但是当成员变量和局部变量名冲突的时候，可以通过 this 来进行区分）
        this.age = age;
        this.height = height;
        hello();
    }

    // 对于静态方法定义，适合不需要访问对象信息的方法
    // （类内部）关于方法或者属性的调用，取决于是否有名称冲突，如果有冲突，可以使用 this 或者类名进行区分，否则会自动识别是静态还是成员
    // static 还有个使用场景就是创建工具类，直接通过类调用，实现一些公共方法
    // 工具类可以通过 private 将构造器私有化，防止外部创建对象
    public static void hello() {
        System.out.println("hello");
    }
}
